﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCuponesSalida : Form
    {
        Utils.Numeros U = new Utils.Numeros();

        //string movimiento;

        Cupon _cupon = new Cupon();
        IList<Cupon> cuponL;

        //DataTable cupon;
        //DataTable cuponesL;

        public frmCuponesSalida()
        {
            //movimiento = tipo;
            InitializeComponent();
        }

        private void frmCuponesSalida_Load(object sender, EventArgs e)
        {
            inicializar();
        }

        private void inicializar()
        {
            //if (movimiento == "INGRESO")
            //{
            //    this.Text = "Ingreso de cupones";
            //}
            //else
            //{
            //    this.Text = "Salida de cupones";
            //}

            ////cuponesL = new DataTable();
            ////cuponesL.Columns.Add("ID");
            ////cuponesL.Columns.Add("NUMERO");
            ////cuponesL.Columns.Add("AFILIADO");
            ////cuponesL.Columns.Add("TOTAL");

            cuponL = new List<Cupon>();

            try
            {
                DataTable cobradores = new DataTable();
                cobradores.Columns.Add("ID");
                cobradores.Columns.Add("NOMBRE");
                Cobradores.FindAll().Where(cobrador => cobrador.activo == 1 && cobrador.id != 1).ToList().ForEach(i => cobradores.Rows.Add(i.id, i.apellido + ", " + i.nombres));

                cboCobrador.DisplayMember = "NOMBRE";
                cboCobrador.ValueMember = "ID";
                cboCobrador.DataSource = cobradores.DefaultView;
                cboCobrador.SelectedIndex = -1;

                dtpFecha.Value = DateTime.Now;

                dgvCupones.AutoGenerateColumns = false;
                dgvCupones.Rows.Clear();
                dgvCupones.DataSource = null;

                limpiarCampos();
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void limpiarCampos()
        {
            //cupon = new DataTable();

            txtCupon.Text = string.Empty;
            dgvCupones.Rows.Clear();

            try
            {
                foreach (var fila in cuponL)
                {
                    double total = 0;
                    IList<Periodo> periodo = Periodos.GetPeriodosByIdCupon(fila.id);

                    total = fila.total;

                    if (dtpFecha.Value >= periodo[0].vencimiento_2)
                    {
                        total += periodo[0].recargo;
                    }

                    dgvCupones.Rows.Add(fila.id, fila.numero, fila.socio.apellido + ", " + fila.socio.nombres, U.AgregarDecimales(total.ToString()));
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void txtCupon_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarCupon();
            }

        }

        private void txtCupon_Leave(object sender, EventArgs e)
        {
            //BuscarCupon();
        }

        private void BuscarCupon()
        {
            bool error = false;
            bool existe = false;

            try
            {
                if (txtCupon.Text != string.Empty)
                {
                    txtCupon.Text = txtCupon.Text.Replace("'", "-");

                    _cupon = Cupones.FindByNumero(txtCupon.Text);

                    if (_cupon != null)
                    {
                        //if (movimiento == "INGRESO")
                        //{
                        //if (_cupon.transito == "I") //INGRESO
                        //{
                        //    error = true;
                        //    MessageBox.Show("El cupón ya ha sido ingresado, verifique el número de cupón e intente nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        //}
                        //}

                        //if (movimiento == "SALIDA")
                        //{
                        if (_cupon.transito == "E") //EGRESO
                        {
                            error = true;
                            MessageBox.Show("El cupón ingresado se encuentra en tránsito, ingrese otro cupón.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        //}

                        if (_cupon.estado == "P") //PAGO
                        {
                            error = true;
                            MessageBox.Show("El cupón ingresado ya se encuentra pago, ingrese otro cupón.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }

                        if (error == false)
                        {
                            foreach (var item in cuponL)
                            {
                                if (txtCupon.Text == item.numero)
                                {
                                    existe = true;
                                }
                            }

                            if (!existe || cuponL.Count > 0)
                            {
                                cuponL.Add(_cupon);
                            }
                        }

                        //if (error == false)
                        //{
                        //    foreach (DataRow fila in cupon.Rows)
                        //    {
                        //        DataRow cuponesRow = cuponesL.NewRow();
                        //        cuponesRow["ID"] = fila["ID"];
                        //        cuponesRow["NUMERO"] = fila["NUMERO"];
                        //        cuponesRow["AFILIADO"] = fila["TITULAR"];
                        //        cuponesRow["TOTAL"] = fila["TOTAL"];

                        //        cuponesL.Rows.Add(cuponesRow);
                        //    }
                        //}

                        limpiarCampos();
                    }
                    else
                    {
                        MessageBox.Show("No se ha podido encontrar el número de cupón. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            IList<CobradorCupon> cobradoresCuponesL = new List<CobradorCupon>();
            int res = 0;

            try
            {
                if (cboCobrador.SelectedIndex > -1)
                {
                    foreach (DataGridViewRow cupon in dgvCupones.Rows)
                    {
                        CobradorCupon cc = new CobradorCupon();

                        cc.cobrador_id = Convert.ToInt32(cboCobrador.SelectedValue);
                        cc.cobrador = Negocio.Cobradores.FindById(cc.cobrador_id);

                        cc.cupon_id = Convert.ToInt32(cupon.Cells["ID"].Value);
                        cc.cupon = Negocio.Cupones.FindById(cc.cupon_id);

                        cc.cupon.socio = Negocio.Socios.FindById(cc.cupon.socio_id);

                        cc.fecha = dtpFecha.Value;

                        //if (movimiento == "INGRESO")
                        //{                    
                        //    cc.tipo_movimiento = "I";
                        //}

                        //if (movimiento == "SALIDA")
                        //{
                        cc.tipo_movimiento = "E";
                        //}

                        //cobradoresCuponesL.Add(cc);

                        res = Cupones.EntradaSalidaCupones(cc);

                        if (res == 0)
                        {
                            break;
                        }
                        else
                        {
                            cobradoresCuponesL.Add(cc);
                        }
                    }
                }
                //res = Cupones.EntradaSalidaCupones(cobradoresCuponesL);

                if (res > 0)
                {
                    DialogResult dr = new DialogResult();
                    dr = MessageBox.Show("Los datos se registraron correctamente.\n¿Desea imprimir el listado de cupones?", "Información", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

                    if (dr == System.Windows.Forms.DialogResult.Yes)
                    {
                        frmCuponesSalidaReporte frm = new frmCuponesSalidaReporte(cobradoresCuponesL);
                        frm.MdiParent = this.MdiParent;
                        frm.Show();
                    }

                    inicializar();
                }
                else
                {
                    MessageBox.Show("No se ha podido registar el movimiento de los cupones. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dgvCupones_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.ColumnIndex == 4)
                {
                    dgvCupones.Rows.RemoveAt(e.RowIndex);

                    var itemToRemove = cuponL.SingleOrDefault(r => r.id == Convert.ToInt32(dgvCupones.Rows[e.RowIndex].Cells["ID"].Value));
                    if (itemToRemove != null)
                        cuponL.Remove(itemToRemove);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void txtCupon_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
